<?php

namespace App\Repositories\Ota\Tc\Policy\Service;

use App\Repositories\Policy\Eloquent\TcRepository;

class TcCommonPolicyService extends TcRepository
{

    /**
     * 上传政策格式化数据
     * @param $param
     */
    public static function formatData($param, &$thisMessageBody)
    {
        $thisMessageBody->messageBody["messageBody"] = [];
        foreach ($param as $key => $value) {

            if (!empty($value['weekSegmentList'])) {
                foreach ($value['weekSegmentList'] as &$weekValue) {
                    $weekValue = intval($weekValue);
                }
            }
            if (!empty($value['saleWeekSegmentList'])) {
                foreach ($value['saleWeekSegmentList'] as &$saleWeekValue) {
                    $saleWeekValue = intval($saleWeekValue);
                }
            }
            // 资源适用场景
            $resourceApplySceneList = [];
            if (!empty($value['resourceApplySceneList'])) {
                $resourceApplySceneList = explode(',', $value['resourceApplySceneList']);
                foreach ($resourceApplySceneList as &$resourceApplySceneValue) {
                    $resourceApplySceneValue = intval($resourceApplySceneValue);
                }
            }

            $item = [

                "policyCode"                                => $value['policyCode'],  //类型：String  可有字段  备注：供应商自定义政策代码，只允许录入字母和数字且字符不得超过50个；底层存储，该字段有索引定义
                "policyCodeExtend"                          => !empty($value['policyCodeExtend']) ? $value['policyCodeExtend'] : '',  //类型：String  可有字段  备注：政策代码扩展字段； 字母和数字中文且字符不得超过50个，可赋值政策代码前缀； 可用于归类定义一批政策，后续查询/删除接口使用； 该字段有索引，查询/删除使用性能更佳；
                "isValid"                                   => $value['isValid'], //类型：Number  可有字段  备注："政策有效,默认1 0-无效、1-有效 "
                "isApplyShareFlight"                        => !empty($value['isApplyShareFlight']) ? intval($value['isApplyShareFlight']) : 0, //类型：Number  可有字段  备注：是否共享航班； 默认(0-否)； 枚举：0-否、1-是；
                "isAgentBooking"                            => !empty($value['isAgentBooking']) ? intval($value['isAgentBooking']) : 0, //类型：Number  可有字段  备注："是否代定位,默认0 0-否、1-是"
                "agentBookFailType"                         => !empty($value['agentBookFailType']) ? intval($value['agentBookFailType']) : 0,//类型：Number  可有字段  备注：代订位失败处理方式；默认(0-拦截下单)；枚举：0-拦截下单、1-收单；
                "seatLimit"                                 => !empty($value['seatLimit']) ? intval($value['seatLimit']) : 0,//类型：Number  可有字段  备注：AV余位阈值； 默认(字段不生效)；生效范围[1-9]，AV余位小于当前指定值才会代订位；
                "avEffectiveSaleValue"                      => intval($value['avEffectiveSaleValue']),//类型：Number  可有字段  备注：AV大于此值可售； 默认(字段不生效)；生效范围[1-9]，AV余位大于当前指定值才会进行售卖
                "reimbursementType"                         => !empty($value['reimbursementType']) ? intval($value['reimbursementType']) : 0,//类型：Number  可有字段  备注：报销类型； 默认( 0-行程单)； 枚举： 0-行程单、1-服务发票； 共享航班出主承运必须为1-服务发票
                "officeNo"                                  => !empty($value['officeNo']) ? $value['officeNo'] : "" ,//类型：String  可有字段  备注："触发订位，需要使用的 office 号（字母+数字，6 位，比如 SZV122），字符长度 0~50，不支持特殊符号"
                "analyzeTicketOfficeNo"                     => !empty($value['analyzeTicketOfficeNo']) ? $value['analyzeTicketOfficeNo'] : '', //类型：String  可有字段  备注：客票解析，需要使用的 office 号（字母+数字，6 位，比如 SZV122）；字符长度 0~50，不支持特殊符号；
                "bigClientCode"                             => !empty($value['bigClientCode']) ? $value['bigClientCode'] : '', //类型：String  可有字段  备注：航司针对给指定代理人的特殊政策的三方协议代码，用于 PAT：A 获取特殊价格； 格式（字母+数字，如 CXZJ10），字符长度 0~50；
                "resourceApplySceneList"                    => $resourceApplySceneList,//类型：Array  可有字段  备注：资源适用场景；List型，默认（空数组，表示常规场景适用）；枚举：4-联程场景、11-拼接假联程；
                // todo
                "transitConfig"                           => !empty($value['transitConfig']) ? $value['transitConfig'] : null,
                "tripType"                                  => !empty($value['tripType']) ? intval($value['tripType']) : 1, //类型：Number  必有字段  备注：行程类型； 枚举：1-单程
                "airCompany"                                => $value['airCompany'], //类型：String  必有字段  备注："航空公司二字代码  2 位大写字母  例：MU"
                "startPort"                                 => $value['startPort'], //类型：String  必有字段  备注：出发机场三字代码
                "endPort"                                   => $value['endPort'], //类型：String  必有字段  备注：抵达机场三字代码
                "cabinCodeList"                             => explode(',',$value['cabinCodeList']),  //类型：Array  必有字段  备注：适用的舱位代码； List型，长度不超过 50； 例：["U","V","F"]；
                "flightNoFit"                               => !empty($value['flightNoFit']) ? intval($value['flightNoFit']) : 0,  //类型：Number  可有字段  备注：航班限制； 非必传，默认0-=所有航班均适用； 枚举：0-所有航班均适用、 1-部分航班适用 、2-部分航班不适用；
                "flightNoList"                              => !empty($value['flightNoList']) ? explode(',',$value['flightNoList']) : null,  //类型：Array  可有字段  备注：当“flightNoFit =0 ”时，FlightNoList 不传； 当“flightNoFit !=0 ”时，必传航班号 ； 每个航班号必须6到7位由字母数字组成；
                "weekSegmentList"                           => !empty($value['weekSegmentList']) ? $value['weekSegmentList'] : [1, 2, 3, 4, 5, 6, 7], //类型：Array  可有字段  备注：航班适用星期数；List型，不传默认[1,2,3,4,5,6,7] ；例：[1,3] 表示适用周一和周三；若周内的七天均适用，请 传入[1,2,3,4,5,6,7]；
                "startDate"                                 => $value["startDate"], //类型：String  必有字段  备注：政策适用起飞开始时间； 格式：yyyy-MM-dd；
                "endDate"                                   => $value["endDate"], //类型：String  必有字段  备注：政策适用起飞截止时间； 格式：yyyy-MM-dd ； 政策适用起飞截止日期 不可小于政策适用起飞开始日期；
                'applyTimeRangeSegment'                     => !empty($value['applyTimeRangeSegment']) ? $value['applyTimeRangeSegment'] : '', //类型：String  可有字段  备注：起飞适用时间；格式：00:00-10:00,12:00-20:00
                'notFlightDate'                             => !empty($value['notFlightDate']) ? $value['notFlightDate'] : '',  //类型：String  可有字段  备注：不适用航班日期 ； 格式：yyyy-MM-dd/yyyy-MM-dd,yyyy-MM-dd/yyyy-MM-dd，不适用日期最多支持6段
                "startSellDate"                             => !empty($value['startSellDate']) ? $value['startSellDate'] . " " . (!empty($value['startSaleApplyTime']) ? $value['startSaleApplyTime'] : '00:00') : "2024-09-16" . " 00:00",            //类型：String  必有字段  备注：销售起始日期，格式：yyyy-MM-dd
                "endSellDate"                               => !empty($value['endSellDate']) ? $value['endSellDate'] . " " . (!empty($value['endSaleApplyTime']) ? $value['endSaleApplyTime'] : '00:00') : $value["endDate"] . " 00:00",        //类型：String  必有字段  备注：销售结束日期，格式：yyyy-MM-dd
                "startSaleDay"                              => !empty($value['startSaleDay']) ? intval($value['startSaleDay']) : 365,  //类型：Number  可有字段  备注："N天内，默认365 0-365之间整数"
                "startSaleTime"                             => !empty($value['startSaleTime']) ? $value['startSaleTime'] : "00:00", //类型：String  可有字段  备注："N时刻开始销售，默认值“00:00” 格式：HH:mm 可输入值范围00:00-23:59"
                "endSaleDay"                                => !empty($value['endSaleDay']) ? intval($value['endSaleDay']) : 0, //类型：Number  可有字段  备注："N天外，默认0 0-365之间整数"
                "endSaleTime"                               => !empty($value['endSaleTime']) ? $value['endSaleTime'] : "00:00", //类型：String  可有字段  备注："N时刻停止销售，默认值“00:00” 格式：HH:mm 可输入值范围00:00-23:59"
                "startSaleApplyTime"                        => !empty($value['startSaleApplyTime']) ? $value['startSaleApplyTime'] : '', //类型：String  可有字段  备注：(即将废弃，使用saleApplyTimeRangeSegment) 销售开始时间；默认值“00:00”
                "endSaleApplyTime"                          => !empty($value['endSaleApplyTime']) ? $value['endSaleApplyTime'] : '',  //类型：String  可有字段  备注：(即将废弃)销售结束时间；默认值“00:00； 销售结束时间<销售起飞时间，默认+1天，例 23:00-08:00 代表适用23:00-00:00 00:00-08:00时间段起飞航班
                "saleApplyTimeRangeSegment"                 => !empty($value['saleApplyTimeRangeSegment']) ? $value['saleApplyTimeRangeSegment'] : '',//类型：String  可有字段  备注：销售适用时间段；格式：00:00-10:00,12:00-20:00
                'adultRebateSource'                         => !empty($value['adultRebateSource']) ? intval($value['adultRebateSource']) : 0.0,//类型：Number  可有字段  备注：成人返点来源； 默认：0-政策录入； 枚举：0-政策录入、1-官网接口；
                "adultRebatePercent"                        => !empty($value['adultRebatePercent']) ? floatval($value['adultRebatePercent']) : 0.0,//类型：Number  必有字段  备注：成人政策返点比例,只支持数字输入，如10%，传10，录入系统后会自动除以100，精确到小数点后第一位
                "adultRebateMoney"                          => !empty($value['adultRebateMoney']) ? floatval($value['adultRebateMoney']) : 0.00, //类型：Number  必有字段  备注：成人政策返点金额,只支持数字输入，精确到小数点后第二位
                "childRebatePercent"                        => !empty($value['childRebatePercent']) ? floatval($value['childRebatePercent']) : 0.0,//类型：Number  必有字段  备注：儿童政策返点比例,只支持数字输入，如10%，传10，录入系统后会自动除以100，精确到小数点后第一位
                "childRebateMoney"                          => !empty($value['childRebateMoney']) ? floatval($value['childRebateMoney']) : 0.00, //类型：Number  必有字段  备注：儿童政策返点金额,只支持数字输入，精确到小数点后第二位
                "keepMoney"                                 => !empty($value['keepMoney']) ? floatval($value['keepMoney']) : 0.00,  //类型：Number  可有字段  备注："留钱，只支持数字输入，精确到小数点后第二位 默认值0.00"
                'keepMoneyPercent'                          => !empty($value['keepMoneyPercent']) ? floatval($value['keepMoneyPercent']) : 0,//类型：Number  可有字段  备注：竞价比例；仅支持大于等于0的两位小数； 如10%，传10，录入系统后会自动除以100，精确到小数点后第二位；
                "sellType"                                  => $value['sellType'],  //类型：Number  可有字段  备注：销售类型； 普通政策目前均是1-AV有座销售；
                "remark"                                    => !empty($value['remark']) ? $value['remark'] : '', //类型：String  可有字段  备注：备注：字母和数字且字符不得超过50个
                "carryVerifyCabinPrice"                     => !empty($value['carryVerifyCabinPrice']) ? intval($value['carryVerifyCabinPrice']) : 0,//类型：Number  可有字段  备注：是否出主承运，只有共享航班可选是 默认0 0-否、1-是
                "carryAirCompany"                           => !empty($value['carryAirCompany']) ? $value['carryAirCompany'] : "",//类型：Number  可有字段  备注：是否出主承运，只有共享航班可选是 默认0 0-否、1-是
                "everydayInventory"                         => $value['everydayInventory'],  //类型：Number  必有字段  备注：总库存数：大于等于0整数
                "rebookSeatLimit"                           => !empty($value['rebookSeatLimit']) ? intval($value['rebookSeatLimit']) : 0, //类型：Number  可有字段  备注：改期代订位AV余位阈值； 默认：0-不代定位 ； 0-不代定位 ； [1-9]：av余位数小于等于该数字代订位； 10：全部代订位；

            ];

            $thisMessageBody->messageBody["messageBody"][]     = $item;

        }

//        dd($item);
        $thisMessageBody->messageBody["messageBody"] = base64_encode(gzencode(json_encode($thisMessageBody->messageBody["messageBody"])));

    }

    /**
     * 更新政策格式化数据
     * @param $param
     * @return array
     */
    public static function formatUpdateData($param)
    {
        $policyList = [];
        if (count($param, 1) == count($param)) {

            $param = [$param];
        }
        foreach ($param as $key => $value) {

            foreach ($value['weekSegmentList'] as &$weekValue){
                $weekValue = intval($weekValue);
            }

            $item = [

                "policyId" => $value['policyId'],
//                "policyCode"  => $value['policyCode'], //类型：String  可有字段  备注：政策代码； 与policyId二者只能使用其一
                "adultRebatePercent" => !empty($value['adultRebatePercent']) ? floatval($value['adultRebatePercent']) : 0.0,//类型：Number  必有字段  备注：成人政策返点比例,只支持数字输入，如10%，传10，录入系统后会自动除以100，精确到小数点后第一位
                "adultRebateMoney" => !empty($value['adultRebateMoney']) ? floatval($value['adultRebateMoney']) : 0.00, //类型：Number  必有字段  备注：成人政策返点金额,只支持数字输入，精确到小数点后第二位
                "childRebatePercent" => !empty($value['childRebatePercent']) ? floatval($value['childRebatePercent']) : 0.0,//类型：Number  必有字段  备注：儿童政策返点比例,只支持数字输入，如10%，传10，录入系统后会自动除以100，精确到小数点后第一位
                "childRebateMoney" => !empty($value['childRebateMoney']) ? floatval($value['childRebateMoney']) : 0.00, //类型：Number  必有字段  备注：儿童政策返点金额,只支持数字输入，精确到小数点后第二位
                "calculationLogic" => !empty($value['calculationLogic']) ? $value['calculationLogic'] : 3, //类型：Number  可有字段  备注：计价逻辑； 可不传，不传默认不修改； 枚举：1-逢一进十、2-进位到个位、3-四舍五入到十位、4-舍去个位、5-四舍五入到个位
                "keepMoney" => !empty($value['keepMoney']) ? floatval($value['keepMoney']) : 0.00,  //类型：Number  可有字段  备注："留钱，只支持数字输入，精确到小数点后第二位 默认值0.00"
                'keepMoneyPercent' => !empty($value['keepMoneyPercent']) ? floatval($value['keepMoneyPercent']) : 0,//类型：Number  可有字段  备注：竞价比例；仅支持大于等于0的两位小数； 如10%，传10，录入系统后会自动除以100，精确到小数点后第二位；
                'adjustType' => !empty($value['adjustType']) ? intval($value['adjustType']) : 0,//类型：Number  可有字段  备注：竞价比例；仅支持大于等于0的两位小数； 如10%，传10，录入系统后会自动除以100，精确到小数点后第二位；
            ];

            $policyList[] = $item;

        }
        return $policyList;
    }

    /**
     * 删除政策格式化数据
     * @param $param
     * @return array
     */
    public static function formatDelData($param, &$policyIds)
    {
        if (count($param, 1) == count($param)) {

            $param = [$param];
        }
        foreach ($param as $key => $value) {
            $policyIds[] = $value['PolicyID'];
        }
    }

}